"""
2.	“霍夫变换（Hough Transfrom）”。霍夫变换是1962年提出来的，最开始就是用来在图像中检测直线，后来扩展能检测圆、曲线等。
程序代码利用OpenCV+Python环境，参照下列关键技术点，完成图像霍夫变换处理任务（35分）
"""
import cv2 as cv
import numpy as np

np.random.seed(1)

# ①	读取图像文件sudoku.png，打印图片维度和尺度
path = 'data/sudoku.png'
img = cv.imread(path, cv.IMREAD_COLOR)
# cv.imshow('original', img)

# ②	Canny边缘检测，并显示
canny = cv.Canny(img, 100, 200)
# cv.imshow('canny', canny)

# ③	进行Hough直线变换（参数自定）
lines = cv.HoughLinesP(canny, 1, np.pi / 180, 40, None, 70, 30)

# ④	打印直线数量
print(f'打印直线数量: {len(lines)}')

# ⑤	显示图像霍夫变换输出
bg = np.zeros_like(img)
for line in lines:
    for x1, y1, x2, y2 in line:
        cv.line(bg, (x1, y1), (x2, y2), (
            np.random.randint(0, 256),
            np.random.randint(0, 256),
            np.random.randint(0, 256),
        ), 1)
cv.imshow('Hough', bg)

cv.waitKey(0)
cv.destroyAllWindows()
